#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include "symtab.h"

#define TAILLE_DICO 50;

//type 1: fonction
//type 2: variable

typedef struct {
  char *nom;
  //enum metatype{ VARIABLE, FONCTION };
  int adresse;  
  union {
    int intval;        /* Constante entière */
    struct {
      int nb_param;
      char **param;
    } func; 
  } val;
} symbole;

symbole *dico;
int max, sommet, base;

void creer_dico() {
  max = TAILLE_DICO;
  base=0;
  sommet=0;
  dico = malloc(max * sizeof(symbole));
}
  
void agrandir_dico()
{
  max *= 2;
  dico = realloc(dico, max);
}

void ajouterSymbole(char *nom)
{
  if (sommet >= max)
    agrandir_dico();
  dico[sommet].nom = malloc(strlen(nom) + 1);
  strcpy(dico[sommet].nom, nom);
  //dico[sommet].type = type;
  //dico[sommet].adresse = adresse;
  //dico[sommet].valeur = valeur;
  sommet++;
}

bool existe(char *nom){
  return (chercher(nom) != -1);    
}

int chercher(char *nom){
  int i;
  for(i=sommet-1; i>0; i--){
    if (strcmp(dico[i].nom, nom))
      return i;
  }
  return -1;
}

/*void modifier(char *nom, int valeur){
  int c;
  if((c = chercher(nom)) != -1)
    dico[c].valeur = valeur;
    }*/

void debut_local(){
  base = sommet;
}

void fin_local(){
  int i;
  for(i=sommet-1; i>base; i--){
    free(dico[i].nom);
  }
  sommet=base;
  base=0;
}

/* void main(){ */
/*   creer_dico(); */
/*   ajouterSymbole(un, 1, 1); */
/*   ajouterSymbole(deux, 1, 1); */
/*   ajouterSymbole(trois, 1, 1); */
/*   ajouterSymbole(quatre, 1, 1); */
/*   ajouterSymbole(cinq, 1, 1); */
/*   ajouterSymbole(six, 1, 1); */
/*   ajouterSymbole(sept, 1, 1); */
/*   debut_local(); */
/*   ajouterSymbole(huit, 1, 1); */
/*   ajouterSymbole(neuf, 1, 1); */
/*   chercher(huit); */
/*   ajouterSymbole(dix, 1, 1); */
/*   fin_local(); */
/*   ajouterSymbole(onze, 1, 1); */
/*   chercher(neuf); */
/*   ajouterSymbole(douze, 1, 1); */
/*   ajouterSymbole(treize, 1, 1); */
/* } */


